package ch.penas.business.dom;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/** @author Daniel */
@Entity
@Table(name = "planning")
public class Agenda implements Serializable {

	/**La serialization de la class Agenda pour question de securiter.*/
	private static final long serialVersionUID = -2339046580103306987L;

	/** idPlanning de l'utilisateur pour l'agenda. */
	@Id
	@Column(name = "id_planning")
	private String idPlanning;

	/** Nom de l'utilisateur pour l'agenda. */
	@Column(name = "r_user")
	private String user;

	/** Nom de la salle pour l'agenda. */
	@Column(name = "salle")
	private String salle;

	/** Nom du titre pour l'agenda. */
	@Column(name = "formation")
	private String title;

	/** La date de de départ cocernant l'evenement de l'agenda. */
	@Column(name = "date")
	private String startDate;

	/** L'heur de de départ cocernant l'evenement de l'agenda. */
	@Column(name = "heur")
	private String startHeur;

	/** Permet de mettre un eventuel commantaire. */
	@Column(name = "commentaire")
	private String commentaire;

	/** Constructeur par défaut de la class Agenda. */
	public Agenda() { }

	/** Re definition du constructeur de la class Agenda.
	 *
	 * @param aUser est egale a l'identifiant de l'utilisateur
	 * @param aIdPlanning est egale a l'idPlanning de l'utilisateur
	 * @param aSalle est egale a la salle
	 * @param aTitle est egale au titre
	 * @param aStartDate est egale a la date de debut
	 * @param aStartHeur est egale a l'heur du debut
	 * @param aCommentaire est egale au commentaire
	 */
	public Agenda(final String aIdPlanning, final String aUser,
				  final String aSalle,
				  final String aTitle, final String aStartDate,
				  final String aStartHeur,
				  final String aCommentaire) {
		this.idPlanning = aIdPlanning;
		this.user = aUser;
		this.salle = aSalle;
		this.title = aTitle;
		this.startDate = aStartDate;
		this.startHeur = aStartHeur;
		this.commentaire = aCommentaire;
	}

	/** Permet d'avoir une sorte de clé primaire.
	 *
	 * @return hashCode de type string
	 */
	public final String getKey() {
		return String.valueOf(hashCode());
	}

	/** Permet de recuperer la valeur de idPlanning.
	 *
	 * @return l'idPlanning de l'utilisateur
	 */
	public final String getIdPlanning() {
		return idPlanning;
	}
	/** Permet de modifier la valeur de idPlanning.
	 *
	 * @param aIdPlanning est egale a l'idPlanning de l'utilisateur
	 */
	public final void setIdPlanning(final String aIdPlanning) {
		this.idPlanning = aIdPlanning;
	}

	/** Permet de recuperer la valeur de user.
	 *
	 * @return le non de l'utilisateur
	 */
	public final String getUser() {
		return this.user;
	}
	/** Permet de modifier la valeur de user.
	 *
	 * @param aUser est egale au nom de l'utilisateur
	 */
	public final void setUser(final String aUser) {
		this.user = aUser;
	}

	/** Permet de recuperer la valeur de la salle.
	 *
	 * @return le non de la salle
	 */
	public final String getSalle() {
		return this.salle;
	}
	/** Permet de modifier la valeur de salle.
	 *
	 * @param aSalle est egale au nom de la salle
	 */
	public final void setSalle(final String aSalle) {
		this.salle = aSalle;
	}

	/** Permet de recuperer la valeur du titre.
	 *
	 * @return le non du titre
	 */
	public final String getTitle() {
		return this.title;
	}
	/** Permet de modifier la valeur du titre.
	 *
	 * @param aTitle est egale au nom du titre
	 */
	public final void setTitle(final String aTitle) {
		this.title = aTitle;
	}

	/** Permet de recuperer la valeur de date.
	 *
	 * @return la date de depart
	 */
	public final String getStartDate() {
		return this.startDate;
	}
	/** Permet de modifier la valeur de la date de depart.
	 *
	 * @param aStartDate est egale a la date de departde l'evenement
	 */
	public final void setStartDate(final String aStartDate) {
		this.startDate = aStartDate;
	}

	/** Permet de recuperer la valeur de l'heure.
	 *
	 * @return l'heure de depart
	 */
	public final String getStartHeur() {
		return this.startHeur;
	}
	/** Permet de modifier la valeur de l'heure de depart.
	 *
	 * @param aStartHeur est egale a l'heure de departde l'evenement
	 */
	public final void setStartHeur(final Date aStartHeur) {
		SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
		String s = formatter.format(aStartHeur);
		this.startHeur = s;
	}

	/** Permet de recuperer la valeur du commentaire.
	 *
	 * @return le commentaire de l'evenement
	 */
	public final String getCommentaire() {
		return this.commentaire;
	}
	/** Permet de modifier la valeur de commentaire.
	 *
	 * @param aCommentaire est egale au commentaire
	 */
	public final void setCommentaire(final String aCommentaire) {
		this.commentaire = aCommentaire;
	}

	/**	Permet de valider les diferentevenement. */
	public final void validate() {
		/*if (this.getTitle() == null) {
			throw new IllegalArgumentException
			("Le champ: (Nom)ne doit pas etre vide");
		}
		if (this.getStartDate() == null) {
			throw new IllegalArgumentException
			("Le champ: (Nom)ne doit pas etre vide");
		}
		if (this.getEndDate() == null) {
			throw new IllegalArgumentException
			("Le champ: (Mail) ne doit pas etre vide");
		}*/
	}
}